﻿using System;
using System.Collections.Generic;
using System.Text;

namespace IllustratedCsharp7_ch14
{
    /*
     Test类定义了两个打印函数
    Main方法创建了委托实例并增加了另外3个方法。
    程序随后调用 了委托 ，也就调用 了它的方法，然而在调用委托之前，程序将进行检测以确保它不是null     
     */
    //定义一个没有返回值和参数的委托类型
    delegate void PrintFunction();

    class Test
    {
        public void Print1()
        {
            Console.WriteLine("Print1 -- instance");
        }
        public static void Print2()
        {
            Console.WriteLine("Print2 -- static");
        }
    }
    class Chapt14_10DelegateExample
    {
        static void _Main()
        {
            Test t = new Test();    //创建一个测试类实例
            PrintFunction pf;       //创建一个空委托

            pf = t.Print1;          //实例化并初始化该委托

            //给委托增加3个另外的方法
            pf += Test.Print2;
            pf += t.Print1;
            pf += Test.Print2;
            //现在，委托含有4个方法

            if (null != pf)  //确认委托有方法
                pf();       //调用委托
            else
            { Console.WriteLine("Delegate is empty"); }
        }
    }
}
